package tech.aistar.day05.constructor;

import java.util.Arrays;

/**
 * 本类用来演示: 商品的实体类 - 构造方法
 *
 * @author: success
 * @date: 2021/3/12 9:27 上午
 */
public class Product {

    //属性/方法 -> 类的成员

    //定义属性
    //修饰符 数据类型 属性名 [= 初始值];

    //id属性比较特殊,推荐项目中所有的实体类给一个id
    //并且后面学习了equals和hashcode方法之后,id - 对象的唯一标志 - 唯一性
    private int id;//如果没有设置初始值,系统会分配默认值

    //定义商品的名称
    private String name;

    //定义商品的价格
    private double price;

    //商品的年份
    private String[] labels;

    //考虑对象与对象之间的关系
    //假设一个商品只能对应一个商品类型

    //数据类型可以是自定义的对象类型
    private ProductType productType;

    //构造方法 - 它是允许重载的
    //如果某个是类体中没有提供任何的构造,那么系统默认会分配一个空参构造
    public Product(){
        //构造体...
        System.out.println("构造方法被调用了...");
    }

    //带参构造
    //如果实体类中已经提供了某个带参构造,那么系统将不会再分配一个空参构造了
    //因为构造方法的赋值方式比setter方法的赋值方式要简单一点.它可以在你创建对象的同时对属性进行赋值操作,但是赋值的机会只有1次.
    public Product(int id,String name,double price){
        this.id = id;
        this.name = name;
        this.price = price;
    }

    /**
     * 全参构造
     * @param id
     * @param name
     * @param price
     * @param labels
     * @param productType
     */
    public Product(int id, String name, double price, String[] labels, ProductType productType){
        this.id = id;
        this.name = name;
        this.price = price;
        this.labels = labels;
        this.productType = productType;
    }

    //提供getter和setter方法
    public int getId(){
        return id;
    }

    public void setId(int id){
        //this代表当前对象,用来区分成员属性和方法参数中的id
        //当前对象 - 调用该方法的对象

        //所有的非静态属性是属于对象的.
        this.id = id;
        //System.out.println(this);
    }

    public String getName(){
        return name;
    }

    public void setName(String name) {
        //setter方法可以进行参数有效性设置
        if("习大大".equals(name)){
            this.name = "***";
            return;
        }
        this.name = name;
    }

    //练习 - 把剩余的属性的getter/setter添加完毕

    public String[] getLabels() {
        return labels;
    }

    public void setLabels(String[] labels) {
        this.labels = labels;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public double getPrice() {
        return price;
    }

    public void setProductType(ProductType productType) {
        this.productType = productType;
    }

    public ProductType getProductType() {
        return productType;
    }

//    public String toString(){
//        //return id+"-"+name;
//        //System.out.println("toString...");
//        return "success";
//    }

    //快捷生成toString
    //alt+insert


    @Override//重写
    public String toString() {
        return "Product{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", labels=" + Arrays.toString(labels) +
                ", productType=" + productType +
                '}';
    }
}
